{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import tensorflow as tf\n",
    "from tensorflow import keras\n",
    "from tensorflow.keras import datasets\n",
    "from tensorflow.keras import Input, Model\n",
    "from tensorflow.keras.layers import Flatten, Dense\n",
    "from tensorflow.keras.callbacks import EarlyStopping\n",
    "\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import time\n",
    "import os"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "(x_train, y_train), (x_test, y_test) = datasets.fashion_mnist.load_data()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "x_train = x_train.reshape(-1, 28*28)\n",
    "x_test = x_test.reshape(-1, 28*28)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "x_train = x_train/255.0\n",
    "x_test = x_test/255.0"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "模型搭建"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 输入层inputx\n",
    "inputs = Input(shape=(28*28), name='input')\n",
    "# 隐层dense  \n",
    "#•第一层隐层设置：神经元个数256，初始化方法为glorot_normal，激活函数为tanh\n",
    "x = Dense(units=256,activation='tanh',kernel_initializer='glorot_normal', name='dense_0')(inputs)\n",
    "#•第二层隐层设置：神经元个数128，初始化方法为glorot_normal，激活函数为tanh\n",
    "x = Dense(units=128, activation='tanh',kernel_initializer='glorot_normal',name='dense_1')(x)\n",
    "# 输出层\n",
    "outputs = Dense(units=10, activation='softmax', name='logit')(x)\n",
    "# 设置模型的inputs和outputsin\n",
    "model = Model(inputs=inputs, outputs=outputs)\n",
    "# 设置损失函数loss、优化器optimizer、评价标准metrics\n",
    "model.compile(loss='sparse_categorical_crossentropy',\n",
    "              optimizer=\"sgd\", metrics=['accuracy'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"functional_1\"\n",
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "input (InputLayer)           [(None, 784)]             0         \n",
      "_________________________________________________________________\n",
      "dense_0 (Dense)              (None, 256)               200960    \n",
      "_________________________________________________________________\n",
      "dense_1 (Dense)              (None, 128)               32896     \n",
      "_________________________________________________________________\n",
      "logit (Dense)                (None, 10)                1290      \n",
      "=================================================================\n",
      "Total params: 235,146\n",
      "Trainable params: 235,146\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "model.summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "#提前终止\n",
    "earlystopping = EarlyStopping(monitor=\"val_loss\",patience=10,min_delta=1e-4,restore_best_weights=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "模型训练"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/150\n",
      "1500/1500 [==============================] - 3s 2ms/step - loss: 0.6853 - accuracy: 0.7757 - val_loss: 0.5156 - val_accuracy: 0.8177\n",
      "Epoch 2/150\n",
      "1500/1500 [==============================] - 3s 2ms/step - loss: 0.4791 - accuracy: 0.8316 - val_loss: 0.4552 - val_accuracy: 0.8350\n",
      "Epoch 3/150\n",
      "1500/1500 [==============================] - 3s 2ms/step - loss: 0.4390 - accuracy: 0.8441 - val_loss: 0.4327 - val_accuracy: 0.8478\n",
      "Epoch 4/150\n",
      "1500/1500 [==============================] - 4s 3ms/step - loss: 0.4157 - accuracy: 0.8517 - val_loss: 0.4148 - val_accuracy: 0.8493\n",
      "Epoch 5/150\n",
      "1500/1500 [==============================] - 4s 3ms/step - loss: 0.4000 - accuracy: 0.8583 - val_loss: 0.4216 - val_accuracy: 0.8487\n",
      "Epoch 6/150\n",
      "1500/1500 [==============================] - 4s 3ms/step - loss: 0.3871 - accuracy: 0.8629 - val_loss: 0.3953 - val_accuracy: 0.8552\n",
      "Epoch 7/150\n",
      "1500/1500 [==============================] - 4s 3ms/step - loss: 0.3766 - accuracy: 0.8646 - val_loss: 0.3889 - val_accuracy: 0.8608\n",
      "Epoch 8/150\n",
      "1500/1500 [==============================] - 5s 3ms/step - loss: 0.3674 - accuracy: 0.8683 - val_loss: 0.3805 - val_accuracy: 0.8622\n",
      "Epoch 9/150\n",
      "1500/1500 [==============================] - 5s 3ms/step - loss: 0.3594 - accuracy: 0.8722 - val_loss: 0.3712 - val_accuracy: 0.8651\n",
      "Epoch 10/150\n",
      "1500/1500 [==============================] - 5s 3ms/step - loss: 0.3520 - accuracy: 0.8731 - val_loss: 0.3761 - val_accuracy: 0.8641\n",
      "Epoch 11/150\n",
      "1500/1500 [==============================] - 5s 3ms/step - loss: 0.3458 - accuracy: 0.8751 - val_loss: 0.3831 - val_accuracy: 0.8599\n",
      "Epoch 12/150\n",
      "1500/1500 [==============================] - 5s 3ms/step - loss: 0.3399 - accuracy: 0.8772 - val_loss: 0.3611 - val_accuracy: 0.8708\n",
      "Epoch 13/150\n",
      "1500/1500 [==============================] - 5s 3ms/step - loss: 0.3341 - accuracy: 0.8790 - val_loss: 0.3659 - val_accuracy: 0.8670\n",
      "Epoch 14/150\n",
      "1500/1500 [==============================] - 5s 3ms/step - loss: 0.3286 - accuracy: 0.8818 - val_loss: 0.3511 - val_accuracy: 0.8736\n",
      "Epoch 15/150\n",
      "1500/1500 [==============================] - 5s 3ms/step - loss: 0.3235 - accuracy: 0.8835 - val_loss: 0.3505 - val_accuracy: 0.8719\n",
      "Epoch 16/150\n",
      "1500/1500 [==============================] - 5s 3ms/step - loss: 0.3183 - accuracy: 0.8868 - val_loss: 0.3464 - val_accuracy: 0.8747\n",
      "Epoch 17/150\n",
      "1500/1500 [==============================] - 5s 3ms/step - loss: 0.3139 - accuracy: 0.8868 - val_loss: 0.3435 - val_accuracy: 0.8757\n",
      "Epoch 18/150\n",
      "1500/1500 [==============================] - 5s 3ms/step - loss: 0.3096 - accuracy: 0.8886 - val_loss: 0.3458 - val_accuracy: 0.8746\n",
      "Epoch 19/150\n",
      "1500/1500 [==============================] - 5s 4ms/step - loss: 0.3057 - accuracy: 0.8903 - val_loss: 0.3394 - val_accuracy: 0.8770\n",
      "Epoch 20/150\n",
      "1500/1500 [==============================] - 6s 4ms/step - loss: 0.3009 - accuracy: 0.8913 - val_loss: 0.3371 - val_accuracy: 0.8788\n",
      "Epoch 21/150\n",
      "1500/1500 [==============================] - 5s 3ms/step - loss: 0.2969 - accuracy: 0.8941 - val_loss: 0.3394 - val_accuracy: 0.8776\n",
      "Epoch 22/150\n",
      "1500/1500 [==============================] - 5s 4ms/step - loss: 0.2928 - accuracy: 0.8940 - val_loss: 0.3453 - val_accuracy: 0.8749\n",
      "Epoch 23/150\n",
      "1500/1500 [==============================] - 5s 4ms/step - loss: 0.2902 - accuracy: 0.8945 - val_loss: 0.3395 - val_accuracy: 0.8782\n",
      "Epoch 24/150\n",
      "1500/1500 [==============================] - 6s 4ms/step - loss: 0.2865 - accuracy: 0.8964 - val_loss: 0.3299 - val_accuracy: 0.8799\n",
      "Epoch 25/150\n",
      "1500/1500 [==============================] - 6s 4ms/step - loss: 0.2821 - accuracy: 0.8974 - val_loss: 0.3292 - val_accuracy: 0.8808\n",
      "Epoch 26/150\n",
      "1500/1500 [==============================] - 6s 4ms/step - loss: 0.2790 - accuracy: 0.8992 - val_loss: 0.3294 - val_accuracy: 0.8788\n",
      "Epoch 27/150\n",
      "1500/1500 [==============================] - 6s 4ms/step - loss: 0.2762 - accuracy: 0.8997 - val_loss: 0.3270 - val_accuracy: 0.8830\n",
      "Epoch 28/150\n",
      "1500/1500 [==============================] - 6s 4ms/step - loss: 0.2727 - accuracy: 0.9012 - val_loss: 0.3259 - val_accuracy: 0.8813\n",
      "Epoch 29/150\n",
      "1500/1500 [==============================] - 6s 4ms/step - loss: 0.2689 - accuracy: 0.9027 - val_loss: 0.3227 - val_accuracy: 0.8825\n",
      "Epoch 30/150\n",
      "1500/1500 [==============================] - 7s 4ms/step - loss: 0.2669 - accuracy: 0.9023 - val_loss: 0.3288 - val_accuracy: 0.8813\n",
      "Epoch 31/150\n",
      "1500/1500 [==============================] - 7s 4ms/step - loss: 0.2636 - accuracy: 0.9040 - val_loss: 0.3231 - val_accuracy: 0.8833\n",
      "Epoch 32/150\n",
      "1500/1500 [==============================] - 7s 5ms/step - loss: 0.2609 - accuracy: 0.9058 - val_loss: 0.3230 - val_accuracy: 0.8845\n",
      "Epoch 33/150\n",
      "1500/1500 [==============================] - 7s 5ms/step - loss: 0.2584 - accuracy: 0.9067 - val_loss: 0.3176 - val_accuracy: 0.8847\n",
      "Epoch 34/150\n",
      "1500/1500 [==============================] - 9s 6ms/step - loss: 0.2550 - accuracy: 0.9070 - val_loss: 0.3179 - val_accuracy: 0.8860\n",
      "Epoch 35/150\n",
      "1500/1500 [==============================] - 8s 6ms/step - loss: 0.2531 - accuracy: 0.9080 - val_loss: 0.3204 - val_accuracy: 0.8828\n",
      "Epoch 36/150\n",
      "1500/1500 [==============================] - 9s 6ms/step - loss: 0.2498 - accuracy: 0.9102 - val_loss: 0.3239 - val_accuracy: 0.8852\n",
      "Epoch 37/150\n",
      "1500/1500 [==============================] - 11s 7ms/step - loss: 0.2474 - accuracy: 0.9102 - val_loss: 0.3117 - val_accuracy: 0.8893\n",
      "Epoch 38/150\n",
      "1500/1500 [==============================] - 15s 10ms/step - loss: 0.2442 - accuracy: 0.9116 - val_loss: 0.3154 - val_accuracy: 0.8852\n",
      "Epoch 39/150\n",
      "1500/1500 [==============================] - 29s 19ms/step - loss: 0.2416 - accuracy: 0.9116 - val_loss: 0.3162 - val_accuracy: 0.8868\n",
      "Epoch 40/150\n",
      "1500/1500 [==============================] - 34s 22ms/step - loss: 0.2395 - accuracy: 0.9127 - val_loss: 0.3142 - val_accuracy: 0.8860\n",
      "Epoch 41/150\n",
      "1500/1500 [==============================] - 29s 19ms/step - loss: 0.2362 - accuracy: 0.9137 - val_loss: 0.3171 - val_accuracy: 0.885820s - loss: \n",
      "Epoch 42/150\n",
      "1500/1500 [==============================] - 36s 24ms/step - loss: 0.2346 - accuracy: 0.9146 - val_loss: 0.3227 - val_accuracy: 0.8831\n",
      "Epoch 43/150\n",
      "1500/1500 [==============================] - 29s 20ms/step - loss: 0.2318 - accuracy: 0.9161 - val_loss: 0.3140 - val_accuracy: 0.8867\n",
      "Epoch 44/150\n",
      "1500/1500 [==============================] - 30s 20ms/step - loss: 0.2296 - accuracy: 0.9176 - val_loss: 0.3122 - val_accuracy: 0.8892\n",
      "Epoch 45/150\n",
      "1500/1500 [==============================] - 31s 20ms/step - loss: 0.2265 - accuracy: 0.9167 - val_loss: 0.3136 - val_accuracy: 0.8847A: 18s -  - ETA: 16s - loss: 0.2229 - - ETA: 16s - loss: 0.2223 - a - ETA: 4s - loss: - ETA: 3s - loss: 0.2268 - ac - ETA - ETA: 1s - loss: 0.2268 - ac - ETA: 1s - loss: 0.2268 -  - ETA: 0s - loss: 0.2265 -  - ETA: 0s - loss: 0.2\n",
      "Epoch 46/150\n",
      "1500/1500 [==============================] - 30s 20ms/step - loss: 0.2251 - accuracy: 0.9187 - val_loss: 0.3136 - val_accuracy: 0.8856 0.2215 - ETA: 6s - loss: 0.2249  - ETA: 6s - loss: 0.2240 - \n",
      "Epoch 47/150\n",
      "1500/1500 [==============================] - 29s 19ms/step - loss: 0.2228 - accuracy: 0.9193 - val_loss: 0.3227 - val_accuracy: 0.88354s - loss: 0.2227 - ac\n"
     ]
    }
   ],
   "source": [
    "history = model.fit(x=x_train, y=y_train, batch_size=32,\n",
    "                    epochs=150, validation_split=0.2,\n",
    "                    shuffle=True,callbacks = [earlystopping])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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t24d69evp7a2llNOOYV58+bx97//nQsuuIAf/ehHhMNh2traWLduHWVlZWzatAmAxsbGPo17sEiomnGBx0jG8txYCCHi56OPPuJrX/saZrOZnJwczj77bFatWsUpp5zC448/zk9/+lM2btxIcnIyI0eOZM+ePdx5550sXbqUlJSUeIcfFwlZMy6XZCyEGMJ6W4PtL0fqtzNv3jyWL1/OG2+8wXXXXcfdd9/N9ddfz/r163nrrbd46KGHeP7553nsscdOcsTxl1A143S3DYfVJMObhBAijubNm8dzzz1HOBympqaG5cuXM2fOHPbv3092dja33HIL3/zmN1m7di21tbVEIhG+8pWvcP/997N27dp4hx8XCVUzVkrJ8CYhhIizyy+/nBUrVjBt2jSUUvzmN78hNzeXJ598kt/+9rdYrVaSkpJ46qmnKCsr46abbiISiQDwy1/+Ms7Rx0dCJWOAAo9LkrEQQsSB1+sFjIrRb3/7W3772992ef+GG27ghhtu6Pa5oVob7iyhmqlBZuESQggx+CRgMnZQ1xqgPRCOdyhCCCFEryReMpbhTUIIIQaZxEvGaS5AkrEQQojBI/GSsUfGGgshhBhcepWMlVILlVLblVK7lFI/PMI185VS65RSm5VSH/RtmL2Xk2zHbFLSiUsIIcSgccyhTUopM/AQcD5QCqxSSr2mtd7S6Zo04M/AQq31AaVUdj/Fe0wWs4ncFIc0UwshhBg0elMzngPs0lrv0VoHgMXAosOu+Trwktb6AIDWurpvwzw+BR4Z3iSEEIkoFArFO4R+0ZtkXAAc7PS6NHqus7GARylVopRao5S6vq8C/CIKZRYuIYQ46b785S8za9YsJk2axCOPPALA0qVLmTlzJtOmTeO8884DjMlBbrrpJqZMmcLUqVN58cUXAUhKSord64UXXuDGG28E4MYbb+T//J//wznnnMM999zDZ599xumnn86MGTM4/fTT2b59OwDhcJi77rordt8//vGPvPfee1x++eWx+77zzjtcccUVJ6M4jktvZuBSPZw7fBZwCzALOA9wAiuUUiu11ju63EipW4FbAXJycigpKTnugI/E6/XG7hdsClDRFOS995dhNvUUvvgiOpex6HtSvv0r0cs3NTWVlpYWAOzLfoKpenOf3j+SPQn/Of/3iO+Hw2EefPBB0tPTaW9vZ/78+Zx33nnc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\n",
      "text/plain": [
       "<Figure size 576x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#画图查看history数据的变化趋势\n",
    "pd.DataFrame(history.history).plot(figsize=(8, 5))\n",
    "plt.grid(True)\n",
    "plt.xlabel('epoch')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "测试集评估结果"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "313/313 [==============================] - 3s 9ms/step - loss: 0.3411 - accuracy: 0.8798\n",
      "loss:  0.3410821259021759\n",
      "accuracy:  0.879800021648407\n"
     ]
    }
   ],
   "source": [
    "loss, accuracy = model.evaluate(x_test, y_test)\n",
    "print('loss: ', loss)\n",
    "print('accuracy: ', accuracy)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.10"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
